# Полезные практики РѕС‚ опытных разработчиков ## Переопределение checkWorkAbility() Р’ `checkWorkAbility` нельзя использовать: - `thisRop()`, заместо этого лучше использовать `getVar/getSelfVar` - обходчики, особенно СЃ инвалидацией РІ БД (запросом РЅР° согласование данных РІ БД) (например, `refreshByParent()` ). Нужно понимать, что `checkWorkAbility` вызывается часто, поэтому его оптимизация сильно сказывается РЅР° времени работы бизнес-логики. ## session.flush() заместо session.commit() `session.commit()` лучше избегать Рё использовать `session.flush()`. `commit()` выгружает данные РёР· кэша РІ БД. `flush()` применяет изменения сессии Рє БД. Р’ случае использования `flush()` данные ещё РЅРµ РІ БД Рё есть возможность откатить изменения, например, РІ случае ошибки. `commit()` вызывает `afterEdit()` СЃ проверкой обязательных полей РІ отличии РѕС‚ `flush()`. ## Рзбегать использование [Option].get Рё [Collection].head РќРµ использовать для: - Option `.get`, если внутри был `None`, то выпадет исключение. Рспользовать `.getOrElse(<значение или исключение, РІ случае None>)`. - коллекций .head без проверки РЅР° пустоту коллекции. лучше использовать `.headOption`, что вернёт результат РІ конструкции `Option`, который дальше распаковать через `.getOrElse()`. ## РњРёРєСЃРёРЅ Btk_Object РјРёРєСЃРёРЅ Btk_Object хранит РІСЃРµ записи классов супер-типа документ Рё справочник. Р’ него нельзя вносить изменения! Рто системный РјРёРєСЃРёРЅ.